package com.dpj.book.service.impl;

import com.dpj.book.mapper.BookMapper;
import com.dpj.book.mapper.CartItemMapper;
import com.dpj.book.pojo.Cart;
import com.dpj.book.pojo.CartItem;
import com.dpj.book.pojo.User;
import com.dpj.book.service.CartItemService;
import com.dpj.book.utils.SqlSessionFactoryUtils1;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.*;

public class CartItemServiceImpl implements CartItemService {
    SqlSessionFactory sessionFactory = SqlSessionFactoryUtils1.getSessionFactory();
    @Override
    public void addCartItem(CartItem cartItem) {
        SqlSession sqlSession = sessionFactory.openSession(true);
        CartItemMapper mapper = sqlSession.getMapper(CartItemMapper.class);
        mapper.addCartItem(cartItem);

    }

    @Override
    public void updateCartItem(CartItem cartItem) {
        SqlSession sqlSession = sessionFactory.openSession(true);
        CartItemMapper mapper = sqlSession.getMapper(CartItemMapper.class);
        mapper.updateCartItem(cartItem);
    }

    @Override
    public void addOrUpdateCartItem(CartItem cartItem, Cart cart) {
        //判断当前用户的用户车中是否有这本书的CartItem,有->update，无 add
        if(cart!=null){
            Map<Integer, CartItem> cartItemMap = cart.getCartItemMap();
            if(cartItemMap==null){
                cartItemMap=new HashMap<>();
            }
            //当前购物车中有这样一本图书
            if(cartItemMap.containsKey(cartItem.getBook().getId())){
                CartItem cartItemTemp  = cartItemMap.get(cartItem.getBook().getId());
                cartItemTemp.setBuyCount(cartItemTemp.getBuyCount()+1);
                updateCartItem(cartItemTemp);
            }else{
                addCartItem(cartItem);
            }
        }else { //连购物车都没有的情况

            addCartItem(cartItem);
        }
    }

    @Override
    public Cart getCart(User user) {
        SqlSession sqlSession = sessionFactory.openSession(true);
        CartItemMapper mapper = sqlSession.getMapper(CartItemMapper.class);
        List<CartItem> cartItemList = mapper.getCartItemList(user);
        Map<Integer,CartItem> cartItemMap=new HashMap<>();
        for (CartItem cartItem : cartItemList) {
            cartItemMap.put(cartItem.getBook().getId(),cartItem);
         //   System.out.println(cartItem);
        }
        Cart cart=new Cart();
        cart.setCartItemMap(cartItemMap);
        return cart;
    }

    @Override
    public List<CartItem> getCartItemList(Map<Integer, CartItem> cartItemMap) {
        List<CartItem> cartItemLis=new ArrayList<>();
        Set<Map.Entry<Integer, CartItem>> entries = cartItemMap.entrySet();
        for (Map.Entry<Integer, CartItem> entry : entries) {
            CartItem value = entry.getValue();
            cartItemLis.add(value);
        }
        return  cartItemLis;

    }
}
